﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////


#pragma once
#include "GcmpDwgDxfInterface.h"
#include "DwgExportData.h"

namespace gcmp
{
    class IModelView;
    class ILinkElementProxy;
    /// \brief 导出的图层映射类
    class GCMP_DWG_DXF_INTERFACE_EXPORT ILayerMapping
    {
    public:
        /// \brief 获取体投影区域填充的图层名称
        /// \param pModelView 当前视图
        /// \param bodyFaceProjectRegionParam 体的面投影的区域参数
        /// \return 返回图层名称
        virtual std::wstring GetLayerNameForBodyFaceProjectRegion(const IModelView* pModelView, const BodyFaceProjectRegionParam& bodyFaceProjectRegionParam, StyleStrategy& styleStrategy) const = 0;

        /// \brief 获取体的边的投影线的图层名称
        /// \param pModelView 当前视图
        /// \param bodyEdgeProjectCurveParam 体的面投影的区域参数
        /// \return 返回图层名称
        virtual std::wstring GetLayerNameForBodyEdgeProjectCurve(const IModelView* pModelView, const BodyEdgeProjectCurveParam& bodyEdgeProjectCurveParam, StyleStrategy& styleStrategy) const = 0;

        /// \brief 获取图层名称，主要是GNode节点，文字、线条等
        /// \param pModelView 当前视图
        /// \param nodeParam GNode节点参数
        /// \return 返回图层名称
        virtual std::wstring GetLayerName(const IModelView* pModelView, const GNodeParam& nodeParam, StyleStrategy& styleStrategy) const = 0;

        /// \brief 获取Element对应的图层名称，注：主文档的对象
        /// \param pModelView 当前视图
        /// \param elementId 构件id
        /// \return 返回图层名称
        virtual std::wstring GetLayerNameByElement(const IModelView* pModelView, const ElementParam& elementParam, StyleStrategy& styleStrategy) const = 0;

        /// \brief 获取链接模型对应的代理对象的图层名称
        /// \param pModelView 当前视图
        /// \param pLinkElementProxy 链接构件的代理
        /// \return 返回图层名称
        virtual std::wstring GetLayerNameByLinkElementProxy(const IModelView* pModelView, const ILinkElementProxy* pLinkElementProxy) const = 0;

    public:
        virtual ~ILayerMapping();
    };
}


